package com.urbanflow.vinci.main;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Date;
import java.util.Map;

import com.urbanflow.vinci.parcourt.Graphe;

public class Arret {
	
	// Declaration des variables
	
	private String nomArret;
	private Integer idArret;
	private List<Ligne> mesLignes = new ArrayList<Ligne>();
	private List<HoraireModele> mesHorairesModeles = new ArrayList<HoraireModele>();
	private Graphe point;
	private Map<Ligne,List<Horaire>> monCache = new HashMap<Ligne,List<Horaire>>();
	
	// Constructeur par defaut
	
	public Arret() {
		nomArret = "Inconnu";
		idArret = 0;
	}
	
	// Constructeur avec des parametres
	
	public Arret(String pNomArret, int pIdArret) {
		nomArret = pNomArret;
		idArret = pIdArret;
	}
	
	// Accesseurs
	
	public String getNomArret() {
		return nomArret;
	}
	
	public Integer getIdArret() {
		return idArret;
	}

	public List<Ligne> getMesLignes() {
		return mesLignes;
	}

	public void setMesLignes(List<Ligne> mesLignes) {
		this.mesLignes = mesLignes;
	}

	public List<HoraireModele> getMesHorairesModeles() {
		return mesHorairesModeles;
	}

	public void setMesHorairesModeles(List<HoraireModele> mesHorairesModeles) {
		this.mesHorairesModeles = mesHorairesModeles;
	}

	public void setNomArret(String nomArret) {
		this.nomArret = nomArret;
	}

	public void setIdArret(Integer idArret) {
		this.idArret = idArret;
	}
	
	public void addLigne(Ligne ligne){
		this.mesLignes.add(ligne);
	}
	
	
	public void addHoraireModele(HoraireModele horaireModele){
		this.mesHorairesModeles.add(horaireModele);
	}
	public String toString(){
		return nomArret;
	}

	public Graphe getPoint() {
		return point;
	}

	public void setPoint(Graphe point) {
		this.point = point;
	}
	
	public List<Horaire> getHoraires(Date date,Ligne maLigne)
	{
		List<Horaire> lH = monCache.get(maLigne);
		if(lH != null)
			return lH;
		lH = new ArrayList<Horaire>(); 
		for(HoraireModele hm : mesHorairesModeles)
		{
			if(hm.getLigne() == maLigne) {
				Horaire he= hm.getNouvelHoraire(date, 1);
				if(he != null)
					lH.add(he);
			}
				
	
//				Date d = date;
//				d.setHours((hm.getHoraire().getHours());
//				d.setMinutes(arg0)(hm.getHoraire().getHours());
				
			}
		monCache.put(maLigne, lH);
		return lH;
			
		}
}
